object HighLevelObj {
  def main(args: Array[String]): Unit = {
    //高阶函数
    val arr1 = Array(1, 2, 3, 4, 5)
    //需要实现每个元素乘以2
    //传统用法实现
    val arr2 = new Array[Int](arr1.length)
    //arr1.indices == 0 until arr1.length
    for (i <- arr1.indices) {
      arr2(i) = arr1(i) * 2
    }
    /*
     * 凡是涉及遍历操作，Scala具有绝大部分应用场景下的高阶函数
     * 使得Scala更适合做数据科学领域
     */
    //使用map进行*2操作,map函数做arr的遍历操作，使用定制的处理方法对每个元素进行操作
    //结果：匿名函数表达
    var arr2_map = arr1.map(n => n * 2 + 3)
    println(arr2_map.mkString(","))

    //1、此方法是将map遍历array当中每一个元素使用该方法进行处理
    def arr1_count(i: Int): Int = {
      i * 2 + 3
    }

    var arr2_def = arr1.map(arr1_count)

    //foreach方法表示使用定制的输出方式进行输出
    def arr2_def_print(i: Int): Unit = {
      println(i)
    }

    arr2_def.foreach(arr2_def_print) // arr2_def.foreach(println)

    //2、将第一步缩写
    arr1.map((i: Int) => i * 2 + 3).foreach((i: Int) => print(i + " "))

    println()
    //3、将第二步缩写
    //Scala具有极强的推导能力
    //'_'表示为读取到的当前元素，i => i
    arr1.map(_ * 2 + 3).foreach(i => print(i + " "))
    println()
    arr1.map(_ * 2 + 3).foreach(i => print(i + "\t"))
    println()
    print(2 + "\t" + 3 + "\t" + 4 + "\t" + 5)
  }
}
